/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package automatacaseelse;

import javax.swing.JOptionPane;

/**
 *
 * @author Carlos, Anibal, Lisseth
 */
public class AutomataFinitoDeterminista {

    private String cadena="";
    private char [] caracter;
    int cont;
    
    public AutomataFinitoDeterminista(String cadena){
      this.cadena=cadena;
      caracter=cadena.toCharArray();
      inicia();
    }

    public void inicia(){
        cont=0;
        estadoA();
    }
    public void estadoA(){

        if(cont<caracter.length){
             if((caracter[cont]=='a')||(caracter[cont]=='s')||(caracter[cont]=='l')){
                     estadoH_ERROR();
             }else{
                    if(caracter[cont]=='c'){
                             cont++;
                             estadoB();
                     }else{
                            if(caracter[cont]=='e'){
                            cont++;
                            estadoF();
                            }else{
                            palabrasFueraAlbabeto();
                            }
                     }
            }
        }
    }

    public void estadoB(){
             if(cont<caracter.length){//para no sobrepasar el limite de la cadena

                if((caracter[cont]=='c')||(caracter[cont]=='s')||(caracter[cont]=='e')||(caracter[cont]=='l')){
                estadoH_ERROR();
                }else{
                    if(caracter[cont]=='a'){
                    cont++;
                    estadoC();
                    }else{
                     palabrasFueraAlbabeto();
                    }
                }


        }

    }
    public void estadoC(){
              if(cont<caracter.length){//para no sobrepasar el limite de la cadena

                if((caracter[cont]=='c')||(caracter[cont]=='a')||(caracter[cont]=='e')||(caracter[cont]=='l')){
                estadoH_ERROR();
                }else{
                    if(caracter[cont]=='s'){
                    cont++;
                    estadoD();
                    }else{
                    palabrasFueraAlbabeto();
                    }
                }
         }

    }
    public void estadoD(){
           if(cont<caracter.length){//para no sobrepasar el limite de la cadena

                if((caracter[cont]=='c')||(caracter[cont]=='a')||(caracter[cont]=='s')||(caracter[cont]=='l')){
                estadoH_ERROR();
                }else{
                    if(caracter[cont]=='e'){
                    cont++;
                    estadoE();
                    }else{
                    palabrasFueraAlbabeto();
                    }
                }
        }
    }

    public void estadoE(){
          if(caracter.length==4){
              JOptionPane.showMessageDialog(null,"El automata ACEPTA la cadena : "+cadena);
            return;
        }else{
            if(cont<caracter.length){
                if((caracter[cont]=='c')||(caracter[cont]=='a')||(caracter[cont]=='s')||(caracter[cont]=='e')||(caracter[cont]=='l')){
                estadoH_ERROR();
                }else{
                palabrasFueraAlbabeto();
                }
             }
        }

    }
    public void estadoF(){
          if(cont<caracter.length){
            if((caracter[cont]=='c')||(caracter[cont]=='a')||(caracter[cont]=='s')||(caracter[cont]=='e')){
                estadoH_ERROR();
            }else{
                    if(caracter[cont]=='l'){
                    cont++;
                    estadoG();
                   }else{
                    palabrasFueraAlbabeto();
                    }
            }
        }
    }
    public void estadoG(){
             if(cont<caracter.length){
                if((caracter[cont]=='c')||(caracter[cont]=='a')||(caracter[cont]=='e')||(caracter[cont]=='l')){
                estadoH_ERROR();
                }else{
                    if(caracter[cont]=='s'){
                    cont++;
                    estadoD();
                    }else{
                    palabrasFueraAlbabeto();
                    }
                }
        }
    }
    public void estadoH_ERROR(){
        JOptionPane.showMessageDialog(null,"La palabra no es valida en el Automata","ERROR",JOptionPane.ERROR_MESSAGE);
         return;
    }
    public void palabrasFueraAlbabeto(){
        if((caracter[cont]!='c')||(caracter[cont]!='a')||(caracter[cont]!='s')||(caracter[cont]!='e')||(caracter[cont]!='l')){
           JOptionPane.showMessageDialog(null,"Contiene Palabras fuera del alfabeto","ERROR",JOptionPane.ERROR_MESSAGE);
                return;
            }

    }
            
}
